package com.zw.design.pattern.creational.factorymethod;

public class Test {
    public static void main(String[] args) {
//        VideoFactory videoFactory=new VideoFactory();
//        Video video = videoFactory.getVideo("java");
//        video.produce();

//        videoFactory.getVideo(JavaVideo.class).produce();

//       定义 定义一个创建对象的接口但让实现这个接口的类来决定实例化那个类 但工厂方法让类的实例化推迟到子类中进行
//       类型 创建型
//        工厂方法 ---适用业务场景 1、创建对象需要大量重复的代码
//        客户端应用层 不依赖于产品类实例如何被创建 实现等细节
//        一个类通过其子类来指定创建那个对象
//        工厂方法 优点
//        用户只需要关心所需产品对应的工厂 无须关心创建细节
//        加入新的产品符合开闭原则 提高可扩展性
//        缺点
//        类的个数容易过多  增加复杂度
//        增加了系统的抽象性和理解难度
        VideoFactory videoFactory=new JavaVideoFactory();
        VideoFactory go=new GoVideoFactory();
        videoFactory.getVideo().produce();
        go.getVideo().produce();
    }
}
